//
//  CGFloat+Ext.swift
//  TTCOM-iOS
//
//  Created by Toj on 11/8/22.
//

import UIKit

private let kDeviceWidth = UIScreen.main.bounds.width
/// 宽度缩放比例系数: 360设计图高度
private let kWidthScale = kDeviceWidth / 360.0
private let kDeviceHeight = UIScreen.main.bounds.height
/// 高度缩放比例系数: 776设计图高度, 不同页面的设计的高度可能不同, 不建议使用
private let kHeightScale = kDeviceHeight / 776.0

// MARK: - 设备
public extension CGFloat {
    
    // MARK: 设备
    /// 设备宽度: 竖屏状态
    static var dv_width: CGFloat {
        return kDeviceWidth
    }
    
    /// 设备高度: 竖屏状态
    static var dv_height: CGFloat {
        return kDeviceHeight
    }
    
    /// 设备宽高比
    static var dv_ratio: CGFloat {
        return dv_height / dv_width
    }
    
    // MARK: 屏幕
    /// 屏幕宽高: 横竖屏状态
    static var sr_width: CGFloat {
        return UIScreen.main.bounds.width
    }
    
    /// 屏幕高度: 横竖屏状态
    static var sr_height: CGFloat {
        return UIScreen.main.bounds.height
    }
    
    /// 屏幕宽高比
    static var sr_ratio: CGFloat {
        return sr_height / sr_width
    }
    
    // MARK: 安全距离
    /// top安全距离
    static var dv_safeAreaTop: CGFloat {
        return UIApplication.shared.app_safeAreaInsets.top
    }
    
    /// left安全距离
    static var dv_safeAreaLeft: CGFloat {
        return UIApplication.shared.app_safeAreaInsets.left
    }
    
    /// right安全距离
    static var dv_safeAreaRight: CGFloat {
        return UIApplication.shared.app_safeAreaInsets.right
    }
    
    /// bottom安全距离
    static var dv_safeAreaBottom: CGFloat {
        return UIApplication.shared.app_safeAreaInsets.bottom
    }
}

// MARK: - UI字体/ View宽高 缩放比例
public extension CGFloat {
    
    /// 缩放
    var ui_scale: CGFloat {
        return kWidthScale * self
    }
   
    /// 缩小
    var ui_mscale: CGFloat {
        let value = kWidthScale * self
        return value > self ? self : value
    }
    
    /// 放大
    var ui_mnscale: CGFloat {
        let value = kWidthScale * self
        return self > value ? self : value
    }
    
    /// 字体缩放
    var f_scale: CGFloat {
        let value = kWidthScale * self
        return value > self ? self : value
    }
}

// MARK: - 固定值
public extension CGFloat {
    
    // MARK: statusBar状态栏
    /// 默认-高度: 20
    static let sts_height20: CGFloat = 20
    /// 刘海-高度: 44
    static let sts_height44: CGFloat = 44
    /// 刘海-高度: 47 iPhone 12/12 Pro/Pro Max
    // static let sts_height47: CGFloat = 47
    /// 刘海-高度: 48 iPhone XR/11
    // static let sts_height48: CGFloat = 48
    /// 刘海-高度: 54 iPhone14 Pro Max
    // static let sts_height54: CGFloat = 54
    
    // MARK: navigationBar导航栏
    /// 导航栏高度
    static let nav_barHeight: CGFloat = 44
    /// 竖屏: 第一个item左侧间距
    static let nav_safe20: CGFloat = 20
    /// 横屏: 第一个item左侧间距
    static let nav_safe64: CGFloat = 64
    
    // MARK: tabBar
    /// tabBar 高度: 49
    static let tab_height49: CGFloat = 49
    /// tabBar 横屏高度: 70 = tab_height49 + tab_safe21
    static let tab_height70: CGFloat = 70
    /// tabBar 竖屏高度: 83 = tab_height49 + tab_safe34
    static let tab_height83: CGFloat = 83
    
    // tabBar safe底部距离
    /// 默认: 0
    static let tab_safe0: CGFloat = 0
    /// 刘海: 横屏21
    static let tab_safe21: CGFloat = 21
    /// 刘海: 竖屏34
    static let tab_safe34: CGFloat = 34
}

// MARK: - 状态栏
public extension CGFloat {
    
    /// 高度
    static var sts_barHeight: CGFloat {
        let application = UIApplication.shared
        guard #available(iOS 13.0, *) else {
            // 这个获取方法通用, 如果下面不好使可以直接使用这个
            return application.statusBarFrame.height
        }
        
        // iOS13 以后苹果推荐使用这个
        let windowScene = application.connectedScenes.first as? UIWindowScene
        guard let statusBarManager = windowScene?.statusBarManager else {
            return application.statusBarFrame.height
        }
        
        return statusBarManager.statusBarFrame.height
    }
}

// MARK: - 导航栏
public extension CGFloat {
    
    /// 导航栏 高度
    static var nav_barHeight2: CGFloat {
        guard let navigationController = UIViewController.vc_currentNavigation else { return 0 }
        let height = navigationController.navigationBar.frame.height
        return height
    }
    
    /// 导航栏全高 = 安全高度 + 默认高度
    static var nav_barFullHeight: CGFloat {
        return sts_barHeight + nav_barHeight
    }
}

// MARK: - tabBar
public extension CGFloat {
    
    // tabBar 安全高度
    static var tab_safeAreaHeight: CGFloat {
        return .dv_safeAreaBottom
    }
    
    // tabBar 高度
    static var tab_barHeight: CGFloat {
        return .tab_height49
    }
    
    /// tabBar完整高度 = 默认高度 + 安全高度
    static var tab_barFullHeight: CGFloat {
        return tab_barHeight + tab_safeAreaHeight
    }
}
